Bei Programmiersprachen haben viele Informatiker Präferenzen, welche manchmal gar mit einer
Art religiösem Eifer verteidigt werden.
Und das gilt natürlich auch für die Betriebssystementwicklung, wenn auch hier die Auswahl der Sprachen etwas
eingeschränkt ist.
2004 kam auf der LKML der Linux Kernel Mailing List beispielsweise diese Mail, in der Linus
Torvalds auf eine eben solche Diskussion antwortet, im konkreten Fall mit dem Vorschlag C++ für
Teile des Kernels zu verwenden.
Im berüchtigten Mailing-Listen-Ton verweist er dabei auf die hohe Komplexität dieser
Programmiersprache sowie deren Übersetzer und sieht drei Gründe, warum man an einem
Betriebssystem Kern überhaupt den C++ entwickeln würde.
Man sucht Probleme.
Man ist C++ jünger und erkennt nicht, dass man eh nur ein c-ähnliches Subset von C++
verwendet oder 3.
Die Hausaufgaben verlangen es.
Nun, machen wir es kurz, auf euch trifft Punkt 3 zu, wir lassen euch schlicht keine andere
Wahl.
Nachdem das jetzt geklärt ist, schauen wir uns diese Sprache mal genauer an.
Ein Ziel bei der Entwicklung von C++ war es, zum klassischen C möglichst kompatibel zu
bleiben, um den Programmierern den Umstieg zu erleichtern, soweit dies das neue Sprachkonzept
erlaubt.
Eine Ausnahme ist beispielsweise, wenn man Schlüsselworte verwendet, die es in C nicht
gibt.
Eine Variable mit dem Namen class ist in C valide, in C++ führt er aber zu einem Übersetzerfehler.
Wenn man von solchen Sonderfällen absieht, ist einfaches Anzieh-C, wie ihr es aus dem
Grundstadium kennt, in den meisten Fällen auch gleichzeitig valides C++.
Das gilt auch für dieses Beispielprogramm, welches lediglich Informatik 4 ausgibt und
auch sowohl von einem C als auch einem C++ Übersetzer ohne Probleme akzeptiert wird.
Allerdings würde ein Vollblut C++-Programmierer dies ein wenig anders schreiben.
So würde er den Header stdio.h durch C stdio austauschen.
Beide sind dem Übersetzer bekannt, aber C stdio ist eine auf C++ angepasste Variante
des C-Headers stdio.h.
Außerdem bietet C++ ein neues Konzept zur Aus- und Eingabe.
Stream-Operatoren.
Diese sind im header.io streamdefiniert.
Im Gegensatz zur fehleranfälligen Printf-F-Familie mit Format-Strings und einer variablen Anzahl
an Parametern wird hier eine Verkettung von Aufrufen an den Shift-Operator des C-Out-Objekts
durchgeführt.
Zudem sorgen Namensräume für Ordnung.
Alle Funktionen aus der C++ Standard Library sind im Namensraum std.de definiert, was bei
C-Out und Endline mit angegeben werden muss.
Da Stringverarbeitung mittels charArrays in C eher kompliziert zu nutzen ist und regelmäßig
zu Puffer überläufen und damit Sicherheitslücken führt, gibt es in C++ einen dedizierten String-Datentyp
mit internem Längenfeld, welcher alle häufig benötigten Operationen bereitstellt.
Es wirkt bereits etwas umständlich, bei jeder Funktion und Objekt explizit den Namensraum
durch das entsprechende Präfix std. anzugeben.
Alternativ kann mittels Using-Names-Space der Suchpfad für Symbole ohne Namensraum-Präfix
bestimmt werden.
Dabei sind Namensräume eine hilfreiche Möglichkeit, Funktionen zu gruppieren und hierarchisch
Presenters
Zugänglich über
Offener Zugang
Dauer
00:25:50 Min
Aufnahmedatum
2020-10-01
Hochgeladen am
2021-09-20 19:18:16
Sprache
de-DE
C++ für die Betriebssystemprogrammierung (Freiwilliges Zusatzseminar der Lehrveranstaltung Betriebssysteme)
Siehe auch (optionale) Übungsaufgabe 0
Folien und Transkript zum Video.